// These are meant to be typed into the REPL. You can also run
// scala -Xnojline < repl-session.scala to run them all at once.
/**
  * 6.3高阶函数
  * 能接受函数作为参数的函数叫做高阶函数。
  */
import scala.math._
//传入一个函数，类型为(Double) => Double
/**
  * 参数可以是任意接受Double类型参数并返回Double的函数。函数的类型为：（参数类型）=>返回类型
  * ValueAtOneQuarter的类型为（（Double）=>Double）=>Double
  * @param f
  * @return
  */
def valueAtOneQuarter(f: (Double) => Double) = f(0.25)//返回这个函数的应用之后的值

valueAtOneQuarter(ceil _)
valueAtOneQuarter(sqrt _)

/**
  * 高阶函数也可以返回函数：
  * @param factor
  * @return
  */
// 产出函数  传入一个参数 返回一个函数，这个函数的类型是 (x : Double) => factor * x  函数有变量(参数) 变量为x
def mulBy(factor : Double) = (x : Double) => factor * x

val quintuple = mulBy(5)
quintuple(20)

